home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / bbsutil / hsrc_117.zip / PRINTER.C < prev    next >
Text File  |  1990-11-25  |  8KB  |  246 lines

  1. /* Prints a group of messages */
  2.  
  3. #include "msgg.h"
  4. #include "twindow.h"
  5. #include "keys.h"
  6. #include "headedit.h"
  7.  
  8.  
  9. void pascal printer (void) {
  10.  
  11.     word x;
  12.     word pglen=0;
  13.     char pl[4];
  14.     char tm[4];
  15.     char bm[4];
  16.     char lm[4];
  17.     char tw[4];
  18.     char reset[2]="-";
  19.     char dosearch[2]="-";
  20.     char headers_only[2]="-";
  21.     char frommess[6];
  22.     char tomess[6];
  23.     char temp[6];
  24.     static char divert[79]="PRN";
  25.     int  returncode;
  26.     char *p;
  27.     int  pp;
  28.     WINDOW *wnd;
  29.     FIELD *fld;
  30.  
  31.                     if(!nomess) return;
  32.                     if(!messno)messno=1;
  33.                     wnd=establish_window(1,maxy-7,20,80);
  34.                     set_border(wnd,3);
  35.                     set_title(wnd," Print Messages ");
  36.                     set_colors(wnd,BORDER,7,0,0);
  37.                     display_window(wnd);
  38.                     wcursor(wnd,0,0);
  39.                     wprintf(wnd," F10 to print or ESC to abort");
  40.                     sprintf(frommess,"%u",messno);
  41.                     sprintf(tomess,"%u",nomess);
  42.                     sprintf(pl,"%hu",pagelength);
  43.                     sprintf(tm,"%hu",topmargin);
  44.                     sprintf(bm,"%hu",bottommargin);
  45.                     sprintf(lm,"%hu",leftmargin);
  46.                     sprintf(tw,"%hu",textwidth);
  47.                     while (p=strchr(beforeheader,'\x1b')) *p='~';
  48.                     while (p=strchr(afterheader,'\x1b')) *p='~';
  49.                     while (p=strchr(aftertext,'\x1b')) *p='~';
  50.                     while (p=strchr(afterprinting,'\x1b')) *p='~';
  51.                     while (p=strchr(beforeheader,'\n')) *p='`';
  52.                     while (p=strchr(afterheader,'\n')) *p='`';
  53.                     while (p=strchr(aftertext,'\n')) *p='`';
  54.                     while (p=strchr(afterprinting,'\n')) *p='`';
  55.                     wprompt(wnd,1,2,"From msg #:");
  56.                     wprompt(wnd,1,3,"To msg #:");
  57.                     wprompt(wnd,1,4,"Reset:         [ ]");
  58.                     wprompt(wnd,1,5,"Page Length:");
  59.                     wprompt(wnd,1,6,"Top Margin:");
  60.                     wprompt(wnd,1,7,"Bottom Margin:");
  61.                     wprompt(wnd,1,8,"Left Margin:");
  62.                     wprompt(wnd,1,9,"Text Width:");
  63.                     wprompt(wnd,1,10,"Before Header:");
  64.                     wprompt(wnd,1,11,"After Header:");
  65.                     wprompt(wnd,1,12,"After Text:");
  66.                     wprompt(wnd,1,13,"After Printing:");
  67.                     wprompt(wnd,1,14,"Print to:");
  68.                     wprompt(wnd,1,16,"Search? [ ]");
  69.                     wprompt(wnd,17,16,"Headers Only? [ ]");
  70.                     fld=establish_field(wnd,17,2,msk5,frommess,'N');
  71.                     field_window(fld,"fromprint ",40,6);
  72.                     field_validate(fld,messlimit);
  73.                     fld=establish_field(wnd,17,3,msk5,tomess,'N');
  74.                     field_window(fld,"toprint   ",40,5);
  75.                     field_validate(fld,messlimit);
  76.                     fld=establish_field(wnd,17,4,msk1,reset,'O');
  77.                     field_window(fld,"reset     ",40,7);
  78.                     fld=establish_field(wnd,17,5,msk3,pl,'N');
  79.                     field_window(fld,"pagelength",40,4);
  80.                     field_validate(fld,charlimit);
  81.                     fld=establish_field(wnd,17,6,msk3,tm,'N');
  82.                     field_window(fld,"topmargin ",40,3);
  83.                     field_validate(fld,charlimit);
  84.                     fld=establish_field(wnd,17,7,msk3,bm,'N');
  85.                     field_window(fld,"bottommarg",40,2);
  86.                     field_validate(fld,charlimit);
  87.                     fld=establish_field(wnd,17,8,msk3,lm,'N');
  88.                     field_window(fld,"leftmargin",40,1);
  89.                     field_validate(fld,charlimit);
  90.                     fld=establish_field(wnd,17,9,msk3,tw,'N');
  91.                     field_window(fld,"textwidth ",40,2);
  92.                     field_validate(fld,charlimit);
  93.                     fld=establish_field(wnd,17,10,msk11,beforeheader,'a');
  94.                     field_window(fld,"beforehead",40,3);
  95.                     fld=establish_field(wnd,17,11,msk11,afterheader,'a');
  96.                     field_window(fld,"afterheade",40,4);
  97.                     fld=establish_field(wnd,17,12,msk47,aftertext,'a');
  98.                     field_window(fld,"aftertext ",40,5);
  99.                     fld=establish_field(wnd,17,13,msk11,afterprinting,'a');
  100.                     field_window(fld,"afterprint",40,6);
  101.                     fld=establish_field(wnd,0,15,msk78,divert,'A');
  102.                     field_window(fld,"divert    ",40,7);
  103.                     field_validate(fld,noblank);
  104.                     fld=establish_field(wnd,10,16,msk1,dosearch,'O');
  105.                     field_window(fld,"searchprnt",40,5);
  106.                     fld=establish_field(wnd,32,16,msk1,headers_only,'O');
  107.                     field_window(fld,"headonly  ",40,5);
  108.                     prep_template(wnd);
  109. Over:
  110.                     returncode=data_entry(wnd);
  111.                     rstrip(beforeheader);
  112.                     rstrip(afterheader);
  113.                     rstrip(aftertext);
  114.                     rstrip(afterprinting);
  115.                     rstrip(divert);
  116.                     while (p=strchr(beforeheader,'~')) *p='\x1b';
  117.                     while (p=strchr(afterheader,'~')) *p='\x1b';
  118.                     while (p=strchr(aftertext,'~')) *p='\x1b';
  119.                     while (p=strchr(afterprinting,'~')) *p='\x1b';
  120.                     while (p=strchr(beforeheader,'`')) *p='\n';
  121.                     while (p=strchr(afterheader,'`')) *p='\n';
  122.                     while (p=strchr(aftertext,'`')) *p='\n';
  123.                     while (p=strchr(afterprinting,'`')) *p='\n';
  124.                     if (returncode==ESC) {
  125.                         delete_window(wnd);
  126.                         return;
  127.                     }
  128.                     if (returncode!=F10) goto Over;
  129.                     delete_window(wnd);
  130.                     topmargin=(char)atoi(tm);
  131.                     pagelength=(char)atoi(pl);
  132.                     bottommargin=(char)atoi(bm);
  133.                     leftmargin=(char)atoi(lm);
  134.                     textwidth=(char)atoi(tw);
  135.                     if (atol(frommess)>atol(tomess)) {
  136.                         strcpy(temp,frommess);
  137.                         strcpy(frommess,tomess);
  138.                         strcpy(tomess,temp);
  139.                     }
  140.  
  141.     if (!stricmp(divert,"PRN")) {
  142.         _AH=2;
  143.         _DX=0;
  144.         geninterrupt(0x17);
  145.         if (_AH!=144) {
  146.             error_message(" Printer not ready ");
  147.             pause();
  148.             return;
  149.         }
  150.     }
  151.     if (*reset!='X') *reset=0;
  152.  
  153.     wnd=establish_window(1,maxy-7,19,maxx);
  154.     set_border(wnd,3);
  155.     set_title(wnd," Printing -- ESCape to abort ");
  156.     set_colors(wnd,BORDER,7,0,0);
  157.     display_window(wnd);
  158.     wcursor(wnd,0,0);
  159.     x=messno;
  160.     if(*dosearch=='X') {
  161.         messno=(word)atol(frommess);
  162.         messno=search(0,0);
  163.         if(messno<=(word)atol(frommess) || messno>(word)atol(tomess) || messno>(nomess)) goto ForgetIt;
  164.     }
  165.  
  166.     if(*headers_only=='X') {
  167.         pp=_open(divert,O_WRONLY | O_BINARY | O_DENYWRITE);
  168.         if(pp == -1) pp=creat(divert,S_IWRITE);
  169.         if(pp != -1) {
  170.             lseek(pp,0L,SEEK_END);
  171.             for (x=0;x<strlen(beforeheader);x++) {
  172.                 if (beforeheader[x]=='\n') {
  173.                     pglen++;
  174.                     ffprintf(pp,"\r\n");
  175.                 }
  176.                 else {
  177.                     ffprintf(pp,"%c",beforeheader[x]);
  178.                 }
  179.                 if(beforeheader[x]=='\xc') pglen=0;
  180.             }
  181.             _close(pp);
  182.         }
  183.     }
  184.  
  185.     for (messno=(word)atol(frommess);messno<((word)atol(tomess)+1) && messno<(nomess+1);messno++) {
  186.         if(*dosearch=='X') {
  187.  
  188.             word temp;
  189.  
  190.             temp=messno;
  191.             messno=search(1,0);
  192.             if(temp==messno || messno<(word)atol(frommess) || messno>(word)atol(tomess) || messno>(nomess)) continue;
  193.         }
  194.         get_mess(0);
  195.         print_clock();
  196.         if(msg.m_attr & DELETED) continue;
  197.         if(*headers_only!='X') {
  198.             export (divert,(currarea->attr & NET)||(currarea->attr & ALTERNATE),PRINTIT,reset,"",wnd);
  199.         }
  200.         else {
  201.             if((pp=_open(divert,O_WRONLY | O_BINARY | O_DENYWRITE))!=-1) {
  202.                     if((pglen+4)>(pagelength-bottommargin)) {
  203.                        ffprintf(pp,"\xc\r\n");
  204.                        pglen=1;
  205.                     }
  206.                     if (pglen<topmargin) {
  207.                        for (x=pglen;x<topmargin;x++) {
  208.                            ffprintf(pp,"\r\n");
  209.                        }
  210.                        pglen=topmargin;
  211.                     }
  212.                     lseek(pp,0L,SEEK_END);
  213.                     ffprintf(pp,"\r\nFm: %-32.32s  To: %-32.32s\r\n",msg.from,msg.to);
  214.                     ffprintf(pp,"Date: %-20.20s   Length: %5u   Addr: %u:%u/%u.%u\r\n",msg.date,msg.length,msg.o_zone,msg.orig_net,msg.orig,msg.o_point);
  215.                     ffprintf(pp,"Subj: %s\r\n",msg.subj);
  216.                     pglen+=4;
  217.                 }
  218.                 _close(pp);
  219.         }
  220.  
  221.         if (kbhit()) {
  222.             returncode=get_char();
  223.             if (returncode==' ' || returncode==ESC) break;
  224.         }
  225.  
  226.     }
  227.     if (areano<(totalareas+1)) if(lastread[areano-1]<messno) lastread[areano-1]=messno;
  228.     if((pp=_open(divert,O_RDWR | O_BINARY | O_DENYWRITE))!=-1) {
  229.         lseek(pp,0L,SEEK_END);
  230.         for(x=0;x<strlen(afterprinting);x++) {
  231.             if(afterprinting[x]=='\n') ffprintf(pp,"\r\n");
  232.             else ffprintf(pp,"%c",afterprinting[x]);
  233.         }
  234.         _close(pp);
  235.     }
  236. ForgetIt:
  237.     messno=x;
  238.     get_mess(0);
  239.     any_message(" Complete ");
  240.     pause();
  241.     delete_window(wnd);
  242.     return;
  243. }
  244.  
  245.  
  246.